package stormapplied.githubcommits.topology;
import backtype.storm.Config;
import backtype.storm.ILocalCluster;
import backtype.storm.Testing;
import backtype.storm.generated.StormTopology;
import backtype.storm.testing.CompleteTopologyParam;
import backtype.storm.testing.MkClusterParam;
import backtype.storm.testing.MockedSources;
import backtype.storm.testing.TestJob;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.assertTrue;
public class TopologyTest {
@Test
public void verifyProperValuesAreEmittedByEachBolt() {
Config config = new Config();
config.setDebug(true);
MkClusterParam clusterParam = new MkClusterParam();
clusterParam.setSupervisors(1);
clusterParam.setDaemonConf(config);
Testing.withSimulatedTimeLocalCluster(clusterParam, new TestJob() {
@Override
public void run(ILocalCluster cluster) {
MockedSources mockedSources = new MockedSources();
mockedSources.addMockData("commit-feed-listener", new Values("12345 test@manning.com"));
Config config = new Config();
config.setDebug(true);
CompleteTopologyParam topologyParam = new CompleteTopologyParam();
topologyParam.setMockedSources(mockedSources);
topologyParam.setStormConf(config);
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("commit-feed-listener", new CommitFeedListener());
builder
.setBolt("email-extractor", new EmailExtractor())
.shuffleGrouping("commit-feed-listener");
builder
.setBolt("email-counter", new EmailCounter())
.fieldsGrouping("email-extractor", new Fields("email"));
StormTopology topology = builder.createTopology();
Map result = Testing.completeTopology(cluster, topology, topologyParam);
assertTrue(Testing.multiseteq(new Values(new Values("12345 test@manning.com")), Testing.readTuples(result, "commit-feed-listener")));
assertTrue(Testing.multiseteq(new Values(new Values("test@manning.com")), Testing.readTuples(result, "email-extractor")));
assertTrue(Testing.multiseteq(new Values(), Testing.readTuples(result, "email-counter")));
}
});
}
}